package pe.edu.upc.jtigers.svpn.data.implement;

import java.util.Collection;

import org.springframework.stereotype.Repository;

import pe.edu.upc.jtigers.svpn.aplication.bean.UsuarioBean;
import pe.edu.upc.jtigers.svpn.aplication.excepcion.DAOExcepcion;
import pe.edu.upc.jtigers.svpn.data.common.BaseDao;
import pe.edu.upc.jtigers.svpn.data.queryable.UsuarioQueryable;
import pe.edu.upc.jtigers.svpn.domain.data.UsuarioDao;
import pe.edu.upc.jtigers.svpn.domain.model.Usuario;

@Repository
public class UsuarioDaoImpl extends BaseDao<Usuario> implements UsuarioDao {

	@Override
	public Usuario iniciarSesion(Usuario usuario) throws DAOExcepcion {
		try {
			usuario = this.getSingleResult(UsuarioQueryable.LOGUEAR, usuario);
		} catch (Exception e) {
			throw new DAOExcepcion(e);
		}
		return usuario;
	}

	@Override
	public Usuario validarUsuario(Usuario usuario) throws DAOExcepcion {
		try {
			Usuario usuarioValido = new Usuario();
			usuarioValido.setCorreoElectronico(usuario.getCorreoElectronico());
			usuarioValido.setNumDocumento(usuario.getNumDocumento());
			usuario = this.getSingleResult(UsuarioQueryable.VALIDA,
					usuarioValido);
		} catch (Exception e) {
			throw new DAOExcepcion(e);
		}
		return usuario;
	}

	@Override
	public Usuario eliminarUsuario(int idUsuario) throws DAOExcepcion {
		// TODO Auto-generated method stub
		Usuario usuario = entityManager.find(Usuario.class, idUsuario);
		usuario.setEliminado(true);
		entityManager.merge(usuario);
		return usuario;
	}

	@Override
	public Collection<Usuario> buscarUsuarios(UsuarioBean usuario)
			throws DAOExcepcion {
		try {

			Usuario usuarioValido = new Usuario();
			usuarioValido.setCorreoElectronico(usuario.getCorreoElectronico());
			usuarioValido.getTipoDocumento().setIdDetalleParametro(
					usuario.getIdTipoDocumento());
			usuarioValido.setNumDocumento(usuario.getNumDocumento());
			usuarioValido.setNombres(usuario.getNombres());
			usuarioValido.setApePaterno(usuario.getApePaterno());
			usuarioValido.setTipoUsuario(usuario.getTipoUsuario());
			return this.getResultList(UsuarioQueryable.BUSCAR, usuarioValido);

		} catch (Exception e) {
			throw new DAOExcepcion(e);
		}
	}

}
